﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAL
{
    public partial    class RendicionVenta
    {
        public void AddSet(dbGestionDataContext _db,
            string numDocumento,
            int idConcepto,
            int idMoneda,
            DateTime fecha,
            int idusuarioCre,
            int idProyecto,
            string comentario,
            decimal tipoCambio)
        {
            this.numDocumento = numDocumento;
            this.fechaCre=DateTime.Now;
            this.usuarioCre=idusuarioCre;
            this.fecha=fecha;
            this.idProyecto = idProyecto;
            this.tipoCambio = tipoCambio;
            this.totalBase = 0;
            this.idConcepto = idConcepto;
            this.idMoneda = idMoneda;
            this.comentario = comentario;

            _db.RendicionVentas.InsertOnSubmit(this);
        }

        public int getidAnterior(dbGestionDataContext _db, int idinternal, int idProyecto)
        {
            int intAnterior = 0;

            int c = _db.OrdenVentas.Where(p => p.idInternal < idinternal & p.idProyecto == idProyecto).Count();
            if (c == 0)
            {
                throw new Exception("No existe Registros");
            }
            else
            {
                intAnterior = _db.OrdenVentas.Where(a => a.idInternal < idinternal & a.idProyecto == idProyecto).Max(a => a.idInternal);

            }


            return intAnterior;

        }
        public int getidSiguiente(dbGestionDataContext _db, int idinternal, int idProyecto)
        {
            int intSiguiente = 0;

            //revisar la sentencia generada

            int c = _db.OrdenVentas.Where(p => p.idInternal > idinternal & p.idProyecto == idProyecto).Count();

            if (c == 0)
            {
                throw new Exception("No existe Registros");
            }
            else
            {
                intSiguiente = _db.OrdenVentas.Where(p => p.idInternal > idinternal & p.idProyecto == idProyecto).Min(a => a.idInternal);
            }

            return intSiguiente;
        }


        public string getCorrelativo(dbGestionDataContext _db, int idProyecto)
        {


            string numDocumento = "00000001";

            var q = from a in _db.RendicionVentas
                    where a.idProyecto == idProyecto
                    select a.numDocumento;


            if (q.Count() > 0)
            {
                int numActual = q.Max(p => Convert.ToInt32(p));


                numActual++;
                if (numActual < 10)
                    numDocumento = "0000000" + numActual.ToString();
                else if (numActual < 100)
                    numDocumento = "000000" + numActual.ToString();
                else if (numActual < 1000)
                    numDocumento = "00000" + numActual.ToString();
                else if (numActual < 10000)
                    numDocumento = "0000" + numActual.ToString();
                else if (numActual < 100000)
                    numDocumento = "000" + numActual.ToString();
                else if (numActual < 1000000)
                    numDocumento = "00" + numActual.ToString();
                else if (numActual < 1000000)
                    numDocumento = "0" + numActual.ToString();
                else if (numActual < 10000000)
                    numDocumento = numActual.ToString();
                else if (numActual > 9999999)
                {
                    throw new Exception("Limite  de Correlativo ");
                }


            }
            return numDocumento;

        }


        public void UpdateTotal(decimal total)
        {
            this.totalBase = total;

        }
    }
}
